<?
/* Se asegura que el archivo es incluido por el index */
	defined( 'LOAD_MODULE_ACTION' ) or die( 'No esta permitido el acceso directo a ' . __FILE__ );
	/* Cuando se hace el include del archivo automaticamente crea un objeto y lo guarda en una variable temporal */
		$this->oTmpObject = new Persona_exe( $this );

	class Persona_exe extends Exe
	{
		function Persona_exe( &$oModule )
			{
				$this->Exe( $oModule );
			}
		function export()
			{

			}
	function updateStar()
		{
			$ncPersona = getParam( 'ncPersona' );
			$bEstrella = getParam( 'bEstrella' ) ;
			if ( $ncPersona )
			{
				$this->oDatabase->update( "atPersona", "bEstrella", $bEstrella, "WHERE", "ncPersona", $ncPersona );
			}
		}
	function updateTag()
		{
			$ncPersona = getParam( 'ncPersona' );
			$ncRotulo = getParam( 'ncRotulo' );
			$cNewItem = getParam( 'newItem' );
			if ( $cNewItem ) 
			{
				$ncRotulo = $this->oDatabase->nextKey( "atRotuloPersona", "ncRotulo" );
				$bOk = $this->oDatabase->insert( "atRotuloPersona", 
										"ncRotulo", $ncRotulo, "cdRotulo", $cNewItem );
			}			
			if ( $ncPersona && $ncRotulo )
			{
				$bOk = $this->oDatabase->insert( "atPersonaRotulo",
										"ncRotulo", $ncRotulo, "ncPersona", $ncPersona );
			}
		}
		function updateParticular()
			{
				// Convierte a variables los datos del Formulario asociado a la accion
				$oForm = $this->oModule->loadClass( 'Persona_frm' );
				extract( $oForm->getFieldArray() );
				// Modifica el Registro de Persona
					$this->oDatabase->update("atPersona",
									"ncUsuario", $this->oModule->oUserSession->getUser(),
									"dModificacion", Date("Y-m-d") ,
									"cAlias", $cAlias,
									"cObservacion", $cObservacion,
									"dNacimiento", $dNacimiento,
									"ncTipoDocumento", $ncTipoDocumento,
									"nDocumento", $nDocumento,
									"ncGenero", $ncGenero,
									"cImagen", $cImagen,
									"WHERE",
									"ncPersona", $ncPersona );
				$oForm->reset();
			}

		// MODIFICAR_UNA_PERSONA
		function update()
			{
				// Convierte a variables los datos del Formulario asociado a la accion
				$oForm = $this->oModule->loadClass( 'Persona_frm' );
				extract( $oForm->getFieldArray() );
				// Agrega o Modifica el Domicilio
					$oDomicilio = $this->oModule->loadClass( 'Domicilio_exe' );
					$ncDomicilio = $oDomicilio->save();
					if ( $ncDomicilio )
					{
						// Verifica si el domicilio tenia domicilio
						$cSql = "SELECT count(*) FROM atPersonaDomicilio WHERE ncPersona = $ncPersona AND ncDomicilio = $ncDomicilio" ;
						$nqDomicilioExistente = $this->oDatabase->getData($cSql);
					// Si el Domicilio es nuevo => relaciona Persona con el Domicilio
						if ( $nqDomicilioExistente > 0)
						{
							$this->oDatabase->update("atPersonaDomicilio",
											"ncTipoDomicilio", DOMICILIO_PARTICULAR,
											"WHERE",
											"ncPersona", $ncPersona,
											"ncDomicilio", $ncDomicilio );
						} else
						{
							$this->oDatabase->insert("atPersonaDomicilio",
											"ncPersona", $ncPersona,
											"dDesde", date("Y-m-d"),
											"ncTipoDomicilio", DOMICILIO_PARTICULAR,
											"ncDomicilio", $ncDomicilio );
						}
					}
					if ( $oForm->aFields['aEmail']->changedValues() )
					{
						if ( $aEmail )
							{
								$ncOrden = $this->oDatabase->nextKey("atPersonaEmail", "ncOrden", "ncPersona=$ncPersona");
								// Busca los esmails que ya estan en la base
								$cSql = "SELECT cEmail,ncOrden FROM atPersonaEmail WHERE ncPersona = $ncPersona";
								$aEmailBase = $this->oDatabase->getKeyArray($cSql);
								$aEmail = explode( ',', $aEmail );
								// Agrega los nuevos emails
								foreach( $aEmail  as $cEmail )
								{
									if ( !array_key_exists( $cEmail, $aEmailBase) )
									{
										$this->oDatabase->insert("atPersonaEmail",
														"ncOrden", $ncOrden++,
														"cEmail", $cEmail,
														"ncPersona", $ncPersona );
									} else unset($aEmailBase[$cEmail]);
								}
								// Quita los que sobran
								foreach( $aEmailBase as $ncOrden )
								{
									$this->oDatabase->delete("atPersonaEmail",
													"ncOrden", $ncOrden,
													"ncPersona", $ncPersona );
								}
							}
					}
				// Modifica el Registro de Persona
					$this->oDatabase->update("atPersona",
									"cNombre", $cNombre,
									"cApellido", $cApellido,
									"ncVisibilidad", $ncVisibilidad,
									"ncGrupo", obtenerMiGrupo(),
									"ncUsuario", $this->oModule->oUserSession->getUser(),
									"dModificacion", Date("Y-m-d") ,
									"cCelular", $cCelular,
									"ncProfesion", $ncProfesion,
									"WHERE",
									"ncPersona", $ncPersona );
									
				$this->setInputData( $ncPersona, $cApellido . "," . $cNombre );
				addMessage('Se actualizaron los datos de la persona');
				return $ncPersona;
			}
		// AGREGAR_UNA_PERSONA
		function insert()
			{
				// Convierte a variables los datos del Formulario asociado a la accion
				$oForm = $this->oModule->loadClass( 'Persona_frm' );
				extract( $oForm->getFieldArray() );
				// Agrega o Modifica el Domicilio
					$oDomicilio = $this->oModule->loadClass( 'Domicilio_exe' );
					$ncDomicilio = $oDomicilio->save();
				// Agrega la Persona
					$cFiltro  = ( $ncGrupo ==  AGENDA_ORGANIZACION )  ? "ncPersona < 1000": "";
					$ncPersona = $this->oDatabase->nextKey( "atPersona", "ncPersona",  $cFiltro  );

					$this->oDatabase->insert("atPersona",
										"cNombre", $cNombre,
										"cApellido", $cApellido,
										"ncVisibilidad", $ncVisibilidad,
										"ncGrupo", obtenerMiGrupo(),
										"ncUsuario", $this->oModule->oUserSession->getUser(),
										"dDesde", Date("Y-m-d") ,
										"dModificacion", Date("Y-m-d") ,
										"bBaja", 0,
										"cCelular", $cCelular,
										"ncProfesion", $ncProfesion,
										"ncPersona", $ncPersona );
				// Si esta el mail lo agrega
				if ( $aEmail )
					{
						$ncOrden = 1;
						$aEmail = explode( ',', $aEmail );
						foreach( $aEmail  as $cEmail )
						{
							$this->oDatabase->insert("atPersonaEmail",
											"ncOrden", $ncOrden++,
											"cEmail", $cEmail,
											"ncPersona", $ncPersona );
						}
					}
					// Agrega el Registro que relaciona Persona con el Domicilio
					if ( $ncDomicilio )
					{
						$this->oDatabase->insert("atPersonaDomicilio",
										"ncPersona", $ncPersona,
										"dDesde", date("Y-m-d"),
										"bPorOmision", 1,
										"ncTipoDomicilio", DOMICILIO_PARTICULAR,
										"ncDomicilio", $ncDomicilio );
					}
				$this->setInputData( $ncPersona, $cApellido . "," . $cNombre );
				// Redirecciona la siguiente accion
				$oForm->reset();
				return $ncPersona;
			}
		// ELIMINAR_UNA_PERSONA
		function delete()
			{
				$ncPersona = getParam( 'ncPersona' );
				if ( $ncPersona )
				{
					$ncMiGrupo = obtenerMiGrupo();
					list( $ncGrupo, $ncVisibilidad ) = $this->oDatabase->getArray( "SELECT ncGrupo, ncVisibilidad FROM atPersona WHERE ncPersona = $ncPersona ");
					if ($ncVisibilidad == VISIBILIDAD_PUBLICO || $ncGrupo == $ncMiGrupo)
					{
						$this->oDatabase->update( "atPersona", "bBaja", 1, "dModificacion", Date("Y-m-d") ,  "ncUsuario", $this->oModule->oUserSession->getUser(),  "WHERE", "ncPersona", $ncPersona );
						addMessage('Se elimino la Persona');
					} else
					{
						addMessage('No tiene permisos para eliminar la persona');
					}
				}
			}
	}
?>
